﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LI4
{
    public partial class EditarCF : Form
    {
        private Business.Curso curs;

        public EditarCF(Business.Curso curso)
        {
            this.curs = curso;
            InitializeComponent();
        }

        private void EditarCF_Load(object sender, EventArgs e)
        {
            if (curs != null)
            {
                int aa = 0, a = 0;
                foreach (Business.Area ar in Program.areas)
                {
                    if (ar.Cod_Area == curs.Area.Cod_Area) aa = a;
                    area1CB.Items.Add(ar);
                    a++;
                }
                area1CB.SelectedIndex = aa;
            }
            else
            {
                curs = new LI4.Business.Curso();
                foreach (Business.Area areaa in Program.areas)
                    area1CB.Items.Add(areaa);
                area1CB.SelectedIndex = 0;
            }

        }

        private void distritoCB_SelectedIndexChanged(object sender, EventArgs e)
        {
            string distrito = distritoCB.Text.Trim();
            
            localidadeCB.Text = "";
            localidadeCB.Items.Clear();

            foreach (Business.Localidade local in Program.localidades)
            {
                if (local.Distrito.Nome.Equals(distrito)) localidadeCB.Items.Add(local);
            }

            if (localidadeCB.Items.Count > 0) localidadeCB.SelectedIndex = 0;
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string area = area1CB.Text.Trim();

            cursoCB.Text = "";
            cursoCB.Items.Clear();

            int aa=0,a=0;
            foreach (Business.Curso curso in Program.cursos)
            {
                if (curso.Area.Nome.Equals(area))
                {
                    cursoCB.Items.Add(curso);
                    a++;
                }
                if (curso.CodCurso == curs.CodCurso) aa = a;
            }

            if (cursoCB.Items.Count > 0)
            {
                cursoCB.SelectedIndex = aa;
                removerB.Enabled = true;
                tabControl1.Enabled = true;
                
            }
            else
            {
                removerB.Enabled = false;
                nomeTB.Text = "";
                distritoCB.Items.Clear();
                localidadeCB.Items.Clear();
                vagasTB.Text = "";
                remuneracaoTB.Text = "";
                areaCB.Items.Clear();
                moradaTB.Text = "";
                cp1TB.Text = "";
                cp2TB.Text = "";
                descricaoTB.Text = "";
                descricaoTB.Text = "";

                tabControl1.Enabled = false;
            }
        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            localidadeCB.Items.Clear();
            Business.Curso curso = (Business.Curso) cursoCB.SelectedItem;
            nomeTB.Text = curso.Nome;

            int l = 0, d = 0, a = 0, ll = 0, dd = 0, aa = 0;

            foreach (Business.Distrito dist in Program.distritos)
            {
                distritoCB.Items.Add(dist);
                if (dist.Nome.Equals(curso.Localidade.Distrito.Nome)) dd = d;
                d++;
            }
            distritoCB.SelectedIndex = dd;


            foreach (Business.Localidade local in Program.localidades)
            {
                if (local.Distrito.Nome.Equals(curso.Localidade.Distrito.Nome))
                {
                    localidadeCB.Items.Add(local);
                    l++;
                }
                if (local.Nome.Equals(curso.Localidade.Nome)) ll = l-1;
                
            }
            localidadeCB.SelectedIndex = ll;

            foreach (Business.Area area in Program.areas)
            {
                areaCB.Items.Add(area);
                if (area.Nome.Equals(curso.Area.Nome)) aa = a;
                a++;
            }

            areaCB.SelectedIndex = aa;
            vagasTB.Text = curso.Totalvagas.ToString();
            remuneracaoTB.Text = curso.Remuneracao.ToString();
            moradaTB.Text = curso.Rua;
            cp1TB.Text = curso.CodPostal.Substring(0, 4);
            cp2TB.Text = curso.CodPostal.Substring(3, 3);

            descricaoTB.Text = curso.Descricao;

            object empty = System.Reflection.Missing.Value;
            axWebBrowser1.Navigate(@"C:/Documents and Settings/fernando/My Documents/Visual Studio 2008/Projects/Li4SVN/Google Maps/ggmps.html");

            mshtml.IHTMLDocument2 doc = axWebBrowser1.Document as mshtml.IHTMLDocument2;
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string area = areaCB.Text.Trim();
            string nome = nomeTB.Text.Trim();
            int vagas = 0;
            int remuneracao = 0;
            string distrito = distritoCB.Text.Trim();
            string localidade = localidadeCB.Text.Trim();
            string morada = moradaTB.Text.Trim();
            string cod_postal = cp1TB.Text.Trim();
            cod_postal = String.Concat(cod_postal, cp2TB.Text.Trim());
            string descricao = descricaoTB.Text.Trim();
            string latitude = "0";
            string longitude = "0";
            Business.Curso curso = (Business.Curso)cursoCB.SelectedItem;
            int nrInscritos = curso.Nrinscritos;
            int cod_curso = curso.CodCurso;

            try
            {
                mshtml.IHTMLDocument2 doc = axWebBrowser1.Document as mshtml.IHTMLDocument2;
                mshtml.HTMLInputElement result = (mshtml.HTMLInputElement)doc.all.item("click_lat", 0);
                mshtml.HTMLInputElement result1 = (mshtml.HTMLInputElement)doc.all.item("click_long", 0);
                latitude = result.value.ToString();
                longitude = result1.value.ToString();
            }
            catch {
                MessageBox.Show(this, "Ocorreu um erro a ler as coordenadas do mapa!\nPor favor tente novamente!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
            }

            try { vagas = Int32.Parse(vagasTB.Text.Trim()); }
            catch {  vagas = 0; }
            try { remuneracao = Int32.Parse(remuneracaoTB.Text.Trim()); }
            catch { remuneracao = 0; }

            if (morada.Length < 1) MessageBox.Show(this, "Campo Morada inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (nome.Length < 1) MessageBox.Show(this, "Campo Nome inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (localidade.Length < 1) MessageBox.Show(this, "Campo Localidade inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (cod_postal.Length < 6) MessageBox.Show(this, "Campo Código Postal inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (descricao.Length < 1) MessageBox.Show(this, "Campo Descriçao inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (vagas ==0) MessageBox.Show(this, "Campo Vagas inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (vagas < curso.Nrinscritos) MessageBox.Show(this, "Vagas inferiores as vagas ja ocupadas!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (remuneracao == 0) MessageBox.Show(this, "Campo Remuneraçao inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            else
            {
                Business.Area areaa = (Business.Area)areaCB.SelectedItem;
                Business.Localidade local = (Business.Localidade)localidadeCB.SelectedItem;
                local.Distrito = (Business.Distrito)distritoCB.SelectedItem;

                curso = new LI4.Business.Curso(nome, cod_curso, areaa, cod_postal, morada, descricao, vagas, nrInscritos, remuneracao, local, latitude, longitude);

                int success = Business.GerirCursos.update(curso);
                if (success==Data.Ligacao.DBERROR)
                    MessageBox.Show(this, "Ocorreu um erro!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                else
                {
                    int x = 0,xx=0;
                    foreach (Business.Curso curs in Program.cursos)
                    {
                        if (curs.CodCurso == curso.CodCurso) xx = x;
                        x++;
                    }
                    Program.cursos.RemoveAt(xx);
                    Program.cursos.Add(curso);
                    MessageBox.Show(this, "Curso de Formaçao editado com sucesso!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.Dispose();
                }

            }
           
        }

        private void EditarCF_Resize(object sender, EventArgs e)
        {
            tabControl1.Width = this.Size.Width - 84;
            tabControl1.Height = this.Size.Height - 200;
            

            button1.Anchor = AnchorStyles.Right;
            button1.Anchor = AnchorStyles.Bottom;
        }

        private void distritoCB_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            string distrito = distritoCB.Text.Trim();

            localidadeCB.Text = "";
            localidadeCB.Items.Clear();

            foreach (Business.Localidade local in Program.localidades)
            {
                if (local.Distrito.Nome.Equals(distrito)) localidadeCB.Items.Add(local);
            }

            if (localidadeCB.Items.Count > 0) localidadeCB.SelectedIndex = 0;
        }

        private void tabControl1_Selected(object sender, TabControlEventArgs e)
        {
           /* object empty = System.Reflection.Missing.Value;
            axWebBrowser1.Navigate(@"C:/Documents and Settings/fernando/My Documents/Visual Studio 2008/Projects/Li4SVN/Google Maps/ggmps.html");

            mshtml.IHTMLDocument2 doc = axWebBrowser1.Document as mshtml.IHTMLDocument2;*/
            
        }

       

        private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
        {
            mshtml.IHTMLDocument2 doc = axWebBrowser1.Document as mshtml.IHTMLDocument2;
            mshtml.HTMLInputElement result = (mshtml.HTMLInputElement)doc.all.item("address", 0);
            Business.Localidade local = (Business.Localidade)localidadeCB.SelectedItem;
            if(moradaTB.Text.Length>0 &&  localidadeCB.Text.Length>0) result.value = moradaTB.Text.Trim() + ", " + local.Nome;

            mshtml.HTMLInputElement lathtml = (mshtml.HTMLInputElement)doc.all.item("click_lat", 0);
            mshtml.HTMLInputElement longhtml = (mshtml.HTMLInputElement)doc.all.item("click_long", 0);

                       
            Business.Curso curso = (Business.Curso)cursoCB.SelectedItem;

            string lat = curso.Latitude.ToString();
            string lng = curso.Longitude.ToString();
            lat = lat.Replace(',','.');
            lng = lng.Replace(',','.');
            
            lathtml.value = lat;
            longhtml.value = lng;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            DialogResult reply = MessageBox.Show(this, "Tem a certeza que deseja remover o curso?", "Inactivaçao", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (reply == DialogResult.Yes)
            {
                Business.Curso curso = (Business.Curso)cursoCB.SelectedItem;
                int success = Business.GerirCursos.remover(curso);
                if (success == Data.Ligacao.DBERROR)
                {
                    MessageBox.Show(this, "Erro na base de dados!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    int xx = 0, x = 0;
                    foreach (Business.Curso curs in Program.cursos)
                    {
                        if (curs.CodCurso == curso.CodCurso) xx = x;
                        x++;
                    }
                    Program.cursos.RemoveAt(xx);
                    MessageBox.Show(this, "Curso removido com sucesso!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.Dispose();
                }
            }    
        }
    }
}
